package controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import pojo.Dept;
import pojo.Employee;
import view.JsonView;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author 徒有琴
 */
@Controller
public class ViewController {
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @RequestMapping("free.html")
    public String freemarker(Map dataModel) {
        // 第四步：加载一个模板，创建一个模板对象。
        // 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
        //向数据集中添加数据
        dataModel.put("name", "孟老师");
        dataModel.put("hobby", "养猫");
        Employee employee = new Employee();
        employee.setId(111);
        employee.setSalary(9999.99F);
        employee.setName("小王");
        dataModel.put("emp", employee);

        List<Dept> deptList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Dept d = new Dept();
            d.setId(i * 2);
            d.setName("部门" + i);
            deptList.add(d);
        }
        dataModel.put("depts", deptList);
        dataModel.put("now", new Date());
        dataModel.put("notFound", "哈哈，有值了");
        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        return "fm";
    }

    @RequestMapping("hello.html")
    public String hello() {
        return "helloView";
    }

    @RequestMapping("json.html")
    public ModelAndView json() {
        Map<String, Object> map = new HashMap<>();
        map.put("key1", "123");
        map.put("date", new Date());
        Dept dept = new Dept();
        dept.setId(456);
        dept.setName("name");
        map.put("dept", dept);
        return new ModelAndView(new JsonView(), "result", map);
    }

    @RequestMapping("body")
    @ResponseBody
    public Dept body() {
        Dept dept = new Dept();
        dept.setId(456);
        dept.setName("name");
        return dept;
    }
}
